
Adélia Cruz
Neural Network Developer

A automação da web requer ferramentas que sejam poderosas e fáceis de usar. No entanto, os sites modernos implementam medidas anti-bot e CAPTCHAs sofisticados que podem interromper os scripts de automação.
A combinação do Helium e do CapSolver oferece uma solução elegante:
Juntos, essas ferramentas permitem automação da web sem interrupções, resolvendo desafios de CAPTCHA automaticamente.
Este guia o ajudará a atingir três objetivos principais:
Helium é uma biblioteca Python que torna o Selenium muito mais fácil de usar. Ele fornece uma API de alto nível que permite escrever automação de navegador em inglês simples.
click("Enviar") em vez de seletores XPath complexosescreva("Olá", em="Pesquisa")# Instalar o Helium
pip install helium
# Instalar a biblioteca requests para a API do CapSolver
pip install requests
from helium import *
# Iniciar o navegador e navegar
start_chrome("https://wikipedia.org")
# Digitar na caixa de pesquisa
escreva("Programação em Python", em=S("input[name='search']"))
# Clicar no botão de pesquisa
clique(Button("Pesquisar"))
# Verificar se o texto existe
se Texto("Python").existe():
print("Artigo sobre Python encontrado!")
# Fechar o navegador
kill_browser()
CapSolver é um serviço de resolução automática de CAPTCHA baseado em IA que suporta uma ampla gama de tipos de CAPTCHA. Ele fornece uma API simples que permite enviar desafios de CAPTCHA e receber soluções em segundos.
Bônus: Use o código
HELIUMao se registrar para receber créditos bônus!
https://api.capsolver.comhttps://api-stable.capsolver.comAntes de combinar o Helium com o CapSolver, a automação da web enfrentava vários desafios:
| Desafio | Impacto |
|---|---|
| Desafios de CAPTCHA | Resolução manual necessária, interrompendo a automação |
| Seletores complexos | O Selenium requer seletores XPath/CSS extensos |
| Problemas de tempo | Elementos não prontos quando acessados |
| Legibilidade do código | Scripts de automação se tornam difíceis de manter |
A integração do Helium + CapSolver resolve esses desafios com código limpo e legível.
O método de integração da API oferece controle total sobre o processo de resolução de CAPTCHA e funciona com qualquer tipo de CAPTCHA.
pip install helium requests
import time
import requests
from helium import *
CHAVE_API_CAPSOLVER = "SUA_CHAVE_DE_API"
ENDPOINT_API_CAPSOLVER = "https://api.capsolver.com"
def criar_tarefa(paylod_tarefa: dict) -> str:
"""Cria uma tarefa de resolução de CAPTCHA e retorna o ID da tarefa."""
resposta = requests.post(
f"{ENDPOINT_API_CAPSOLVER}/criarTarefa",
json={
"chaveCliente": CHAVE_API_CAPSOLVER,
"tarefa": paylod_tarefa
}
)
resultado = resposta.json()
if resultado.get("idErro") != 0:
raise Exception(f"Erro do CapSolver: {resultado.get('descricaoErro')}")
return resultado["idTarefa"]
def obter_resultado_tarefa(id_tarefa: str, tentativas_maximas: int = 120) -> dict:
"""Verifica o resultado da tarefa até que seja resolvida ou expire o tempo."""
for _ in range(tentativas_maximas):
resposta = requests.post(
f"{ENDPOINT_API_CAPSOLVER}/obterResultadoTarefa",
json={
"chaveCliente": CHAVE_API_CAPSOLVER,
"idTarefa": id_tarefa
}
)
resultado = resposta.json()
if resultado.get("status") == "pronto":
return resultado["solução"]
elif resultado.get("status") == "falha":
raise Exception(f"Tarefa falhou: {resultado.get('descricaoErro')}")
time.sleep(1)
raise TimeoutError("A resolução de CAPTCHA expirou")
def resolver_captcha(paylod_tarefa: dict) -> dict:
"""Fluxo completo de resolução de CAPTCHA."""
id_tarefa = criar_tarefa(paylod_tarefa)
return obter_resultado_tarefa(id_tarefa)
Você também pode usar a extensão do CapSolver com o Helium para detecção e resolução automática de CAPTCHA.
config.js da extensão:// No diretório da extensão, edite: assets/config.js
var definido = {
apiKey: "SUA_CHAVE_DE_API_DO_CAPSOLVER", // Substitua pela sua chave de API real
habilitadoParaControleDeListaNegra: false,
listaUrlNegra: [],
habilitadoParaReCaptcha: true,
habilitadoParaReCaptchaV3: true,
habilitadoParaTurnstile: true,
// ... outras configurações
}
from helium import *
from selenium.webdriver import ChromeOptions
options = ChromeOptions()
options.add_argument('--carregar-extensão=/caminho/para/capsolver-extensão')
start_chrome(options=options)
# A extensão detectará e resolverá CAPTCHAs automaticamente
Nota: A extensão deve ter uma chave de API válida configurada antes de poder resolver CAPTCHAs automaticamente.
Este exemplo resolve o reCAPTCHA v2 na página de demonstração do Google com detecção automática da chave do site:
import time
import requests
from helium import *
from selenium.webdriver import ChromeOptions
CHAVE_API_CAPSOLVER = "SUA_CHAVE_DE_API"
ENDPOINT_API_CAPSOLVER = "https://api.capsolver.com"
def resolver_recaptcha_v2(chave_site: str, url_pagina: str) -> str:
"""Resolve o reCAPTCHA v2 e retorna o token."""
# Criar a tarefa
resposta = requests.post(
f"{ENDPOINT_API_CAPSOLVER}/criarTarefa",
json={
"chaveCliente": CHAVE_API_CAPSOLVER,
"tarefa": {
"tipo": "ReCaptchaV2TarefaSemProxy",
"websiteURL": url_pagina,
"websiteKey": chave_site,
}
}
)
resultado = resposta.json()
if resultado.get("idErro") != 0:
raise Exception(f"Erro: {resultado.get('descricaoErro')}")
id_tarefa = resultado["idTarefa"]
print(f"Tarefa criada: {id_tarefa}")
# Verificar resultado
while True:
resultado = requests.post(
f"{ENDPOINT_API_CAPSOLVER}/obterResultadoTarefa",
json={
"chaveCliente": CHAVE_API_CAPSOLVER,
"idTarefa": id_tarefa
}
).json()
if resultado.get("status") == "pronto":
return resultado["solução"]["gRecaptchaResponse"]
elif resultado.get("status") == "falha":
raise Exception(f"Falha: {resultado.get('descricaoErro')}")
print(" Aguardando solução...")
time.sleep(1)
def main():
url_alvo = "https://www.google.com/recaptcha/api2/demo"
# Configurar o navegador com anti-deteção
options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--disable-blink-features=AutomationControlled')
print("Iniciando o navegador...")
start_chrome(url_alvo, options=options)
driver = get_driver()
try:
time.sleep(2)
# Detectar automaticamente a chave do site
elemento_recaptcha = driver.find_element("css selector", ".g-recaptcha")
chave_site = elemento_recaptcha.get_attribute("data-sitekey")
print(f"Chave do site detectada: {chave_site}")
# Resolver o CAPTCHA
print("\nResolvendo reCAPTCHA v2 com o CapSolver...")
token = resolver_recaptcha_v2(chave_site, url_alvo)
print(f"Token obtido: {token[:50]}...")
# Injetar o token
print("\nInjetando token...")
driver.execute_script(f'''
var campoResposta = document.getElementById('g-recaptcha-response');
campoResposta.style.display = 'block';
campoResposta.value = '{token}';
''')
print("Token injetado!")
# Submeter usando a sintaxe simples do Helium
print("\nSubmetendo o formulário...")
clique("Enviar")
time.sleep(3)
# Verificar sucesso
se "Verificação bem-sucedida" em driver.page_source:
print("\n=== SUCESSO! ===")
print("reCAPTCHA foi resolvido e o formulário foi submetido!")
finally:
kill_browser()
if __name__ == "__main__":
main()
Teste-o você mesmo:
python demo_recaptcha_v2.py
Cloudflare Turnstile é um dos desafios de CAPTCHA mais comuns. Aqui está como resolvê-lo:
import time
import requests
from helium import *
from selenium.webdriver import ChromeOptions
CHAVE_API_CAPSOLVER = "SUA_CHAVE_DE_API"
ENDPOINT_API_CAPSOLVER = "https://api.capsolver.com"
def resolver_turnstile(chave_site: str, url_pagina: str) -> str:
"""Resolve Cloudflare Turnstile e retorna o token."""
resposta = requests.post(
f"{ENDPOINT_API_CAPSOLVER}/criarTarefa",
json={
"chaveCliente": CHAVE_API_CAPSOLVER,
"tarefa": {
"tipo": "AntiTurnstileTarefaSemProxy",
"websiteURL": url_pagina,
"websiteKey": chave_site,
}
}
)
resultado = resposta.json()
if resultado.get("idErro") != 0:
raise Exception(f"Erro: {resultado.get('descricaoErro')}")
id_tarefa = resultado["idTarefa"]
while True:
resultado = requests.post(
f"{ENDPOINT_API_CAPSOLVER}/obterResultadoTarefa",
json={
"chaveCliente": CHAVE_API_CAPSOLVER,
"idTarefa": id_tarefa
}
).json()
if resultado.get("status") == "pronto":
return resultado["solução"]["token"]
elif resultado.get("status") == "falha":
raise Exception(f"Falha: {resultado.get('descricaoErro')}")
time.sleep(1)
def main():
url_alvo = "https://seu-site-alvo.com"
chave_turnstile = "0x4XXXXXXXXXXXXXXXXX" # Encontre na fonte da página
# Configurar o navegador
options = ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled')
start_chrome(url_alvo, options=options)
driver = get_driver()
try:
# Aguardar o Turnstile carregar
time.sleep(3)
# Resolver o CAPTCHA
print("Resolvendo Turnstile...")
token = resolver_turnstile(chave_turnstile, url_alvo)
print(f"Token obtido: {token[:50]}...")
# Injetar o token
driver.execute_script(f'''
document.querySelector('input[name="cf-turnstile-response"]').value = "{token}";
// Ativar o callback se estiver presente
const callback = document.querySelector('[data-callback]');
se (callback) {{
const nomeCallback = callback.getAttribute('data-callback');
se (window[nomeCallback]) {{
window[nomeCallback]('{token}');
}}
}}
''')
# Submeter o formulário usando o Helium
se Button("Enviar").existe():
clique("Enviar")
print("Turnstile contornado!")
finally:
kill_browser()
if __name__ == "__main__":
main()
O reCAPTCHA v3 é baseado em pontuação e não requer interação do usuário:
import time
import requests
from helium import *
from selenium.webdriver import ChromeOptions
CHAVE_API_CAPSOLVER = "SUA_CHAVE_DE_API"
ENDPOINT_API_CAPSOLVER = "https://api.capsolver.com"
def resolver_recaptcha_v3(
chave_site: str,
url_pagina: str,
ação: str = "verificar",
pontuação_mínima: float = 0.7
) -> str:
"""Resolve o reCAPTCHA v3 com a ação e pontuação mínima especificadas."""
resposta = requests.post(
f"{ENDPOINT_API_CAPSOLVER}/criarTarefa",
json={
"chaveCliente": CHAVE_API_CAPSOLVER,
"tarefa": {
"tipo": "ReCaptchaV3TarefaSemProxy",
"websiteURL": url_pagina,
"websiteKey": chave_site,
"pageAction": ação,
"minScore": pontuação_mínima
}
}
)
resultado = resposta.json()
if resultado.get("idErro") != 0:
raise Exception(f"Erro: {resultado.get('descricaoErro')}")
id_tarefa = resultado["idTarefa"]
while True:
resultado = requests.post(
f"{ENDPOINT_API_CAPSOLVER}/obterResultadoTarefa",
json={
"chaveCliente": CHAVE_API_CAPSOLVER,
"idTarefa": id_tarefa
}
).json()
if resultado.get("status") == "pronto":
return resultado["solução"]["gRecaptchaResponse"]
elif resultado.get("status") == "falha":
raise Exception(f"Falha: {resultado.get('descricaoErro')}")
time.sleep(1)
def main():
url_alvo = "https://seu-site-alvo.com"
chave_recaptcha_v3 = "6LcXXXXXXXXXXXXXXXXXXXXXXXXX"
# Configurar navegador em modo headless para v3
options = ChromeOptions()
options.add_argument('--headless')
start_chrome(url_alvo, options=options)
driver = get_driver()
try:
# Resolver reCAPTCHA v3 com ação "login"
print("Resolvendo reCAPTCHA v3...")
token = resolver_recaptcha_v3(
chave_recaptcha_v3,
url_alvo,
ação="login",
pontuação_mínima=0.9
)
# Injetar o token
driver.execute_script(f'''
var campoResposta = document.querySelector('[name="g-recaptcha-response"]');
se (campoResposta) {{
responseField.value = '{token}';
}}
// Chamar o callback se existir
if (typeof onRecaptchaSuccess === 'function') {{
onRecaptchaSuccess('{token}');
}}
''')
print("reCAPTCHA v3 contornado!")
finally:
kill_browser()
if __name__ == "__main__":
main()
Configure o Chrome para parecer mais como um navegador regular:
from helium import *
from selenium.webdriver import ChromeOptions
options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument('--window-size=1920,1080')
start_chrome(options=options)
Use a sintaxe simples do Helium para a maioria das operações, mas acesse o Selenium quando necessário:
from helium import *
start_chrome("https://site-alvo.com")
# Use o Helium para interações simples
escrever("username", em="Email")
escrever("password", em="Senha")
# Acesse o driver do Selenium para operações complexas
driver = get_driver()
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
# Volte ao Helium
clicar("Login")
Evite disparar limitações de taxa adicionando atrasos aleatórios:
import random
import time
def atraso_humano(min_sec=1.0, max_sec=3.0):
"""Atraso aleatório para imitar comportamento humano."""
time.sleep(random.uniform(min_sec, max_sec))
# Use entre ações
clicar("Próximo")
atraso_humano()
escrever("dados", em="Entrada")
Sempre implemente tratamento de erros adequado para resolução de CAPTCHA:
def resolver_com_retentativa(payload_da_tarefa: dict, max_tentativas: int = 3) -> dict:
"""Resolver CAPTCHA com lógica de tentativa de novo."""
for tentativa in range(max_tentativas):
try:
return resolver_captcha(payload_da_tarefa)
except TimeoutError:
if tentativa < max_tentativas - 1:
print(f"Tempo esgotado, tentando novamente... ({tentativa + 1}/{max_tentativas})")
time.sleep(5)
else:
raise
except Exception as e:
if "saldo" in str(e).lower():
raise # Não tentar novamente erros de saldo
if tentativa < max_tentativas - 1:
time.sleep(2)
else:
raise
Use o modo headless para automação em segundo plano:
from helium import *
from selenium.webdriver import ChromeOptions
options = ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
start_chrome("https://site-alvo.com", options=options)
| Operação | Selenium | Helium |
|---|---|---|
| Clicar no botão | driver.find_element(By.XPATH, "//button[text()='Enviar']").click() |
clicar("Enviar") |
| Digitar texto | driver.find_element(By.NAME, "email").send_keys("test@test.com") |
escrever("test@test.com", em="Email") |
| Pressionar Enter | element.send_keys(Keys.ENTER) |
pressionar(ENTER) |
| Verificar se o texto existe | "Bem-vindo" in driver.page_source |
Texto("Bem-vindo").existe() |
A integração do Helium e do CapSolver cria uma ferramenta elegante para automação web:
Seja para construir raspadores de web, sistemas de testes automatizados ou pipelines de coleta de dados, essa combinação oferece simplicidade e poder.
Bônus: Use o código
HELIUMao se cadastrar no CapSolver para receber créditos bônus!
O Helium torna o Selenium mais fácil de usar:
O CapSolver suporta todos os principais tipos de CAPTCHA. O Turnstile do Cloudflare e o reCAPTCHA v2/v3 têm as maiores taxas de sucesso. A integração funciona perfeitamente com qualquer CAPTCHA que o CapSolver suporte.
Sim! O Helium suporta modo headless via ChromeOptions. No modo headless, o reCAPTCHA v3 e CAPTCHAs baseados em token funcionam perfeitamente. Para CAPTCHAs visíveis v2, o modo com interface pode oferecer melhores resultados.
Procure no código-fonte da página por:
data-sitekey ou elementos cf-turnstiledata-sitekey no div g-recaptchaSoluções comuns:
Sim! Chame get_driver() para acessar o WebDriver do Selenium subjacente para qualquer operação que o Helium não cubra diretamente.
Aprenda arquitetura de raspagem web escalável em Rust com reqwest, scraper, raspagem assíncrona, raspagem de navegador headless, rotação de proxies e tratamento de CAPTCHA compatível.

Compare o Selenium vs Puppeteer para resolver CAPTCHA. Descubra benchmarks de desempenho, notas de estabilidade e como integrar o CapSolver para o máximo de sucesso.
